package com.web.dao;

import com.web.pojo.domain.Address;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @Author: wws
 * @Date: 2021/1/25 17:24
 * describe:
 */
@Mapper
@Repository
public interface AddressDao {
    /**
     * 新增保存地址信息
     * @param addressTree 地址信息
     * @return 结果
     */
    public Integer insertAddress(Address addressTree);

    /**
     * 修改地址信息
     * @param addressTree 地址信息
     * @return 结果
     */
    public Integer updateAddress(Address addressTree);

    /**
     * 查询地址树列表
     * @param userId 用户Id
     * @return 结果
     */
    public List<Address> selectAddressList(Integer userId, String addressName);

    /**
     * 查询地址树列表
     * @param userId 用户
     * @return 结果
     */
    public List<Address> selectAddressByUserId(Integer userId);

    /**
     * 删除设备树信息
     * @param addressId 地址id
     * @return 结果
     */
    public Integer deleteAddress(@Param("updateBy") String updateBy, @Param("addressId") Integer addressId);

    /**
     * 效验地址名称是否唯一
     * @param pid 父id
     * @param addressName 地址名
     * @return 结果
     */
    public Address checkAddressNameUnique(@Param("pid") Integer pid, @Param("addressName") String addressName);

    /**
     * 效验地址父名称是否唯一
     * @param pid 父id
     * @param addressName 地址名
     * @return 结果
     */
    public Address checkAddressRootNodeNameUnique(@Param("pid") Integer pid, @Param("addressName") String addressName, @Param("userId") Integer userId);

    /**
     * 根据地址ID查询信息
     * @param addressId 地址ID
     * @return 地址信息
     */
    public Address selectAddressById(@Param("addressId") Integer addressId);

    /**
     * 查询地址下所拥有的网关数
     * @param addressId 地址id
     * @return 结果
     */
    public Integer checkAddressExistGateWay(@Param("addressId") Integer addressId);

    /**
     * 查询地址下所拥有的设备数
     * @param addressId 地址id
     * @return 结果
     */
    public Integer checkAddressExistDevice(@Param("addressId") Integer addressId);

    /**
     * 查询地址树信息
     * @param addressId 地址id
     * @return 结果
     */
    public Address selectAddress(@Param("addressId") Integer addressId);

    /**
     * 查询地址下所拥有的子地址数
     * @param addressId 父地址id
     * @return 结果
     */
    public Integer checkAddressExistChild(Integer addressId);

    /**
     * 查看地址子节点列表
     * @param addressId 地址id
     * @return 结果
     */
    public List<Address> selectAddressChildNodeList(Integer addressId);


    /**
     * 地址授权
     * @param ids 授权的Id
     * @param userId 用户id
     * @return 结果
     */
    public Integer authorizeAddress(@Param("ids") List<Integer> ids, @Param("userId") Integer userId);
}
